package com.hxk.di.config;

import com.hxk.di.service.BookService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

/**
 * 使用@Resource实现自动装配
 * @Resource的装配规则为：
 *      优先使用名称到ico容器中去查找对象实例，
 *          找到直接注入
 *          找不到，在根据注入属性的类型去ioc容器中查找对象，
 *              如果找到，直接注入
 *              如果找不到，报异常
 */
@Configuration
@ComponentScan("com.hxk.di")
public class MainConfigResource {

    /**
     * 向ioc容器中注两个bookService，名称分别为bookService和bookService1
     *      使用@Resource依赖注入时，如果按名称找不到，将会按类型去找，如果找到多个时，如果在没有标注@Qualifier和@Primary情况下会报找到多个实例的异常
     *          如果标准了，会按照标注的规则进行依赖注入
     *          @Qualifier（id） 设置要注入的id
     *          @Primary 设置当ioc容器发现多个实例时，已标注该注解的实例优先注入
     * @return
     */
    @Primary
    @Bean("bookService1")
    public BookService bookService(){
        BookService bookService = new BookService();
        bookService.setFlag("flag02");
        return bookService;
    }
}
